package base.service;

import base.entity.regitem.DirRegItem;
import base.entity.regitem.RegItem;
import base.entity.serach.SearchResult;
import base.util.XMLUtils;
import base.view.DirectoriesView;
import base.view.View;

import java.io.File;
import java.io.IOException;
import java.util.List;

/**
 * crete by lyl
 * 2019.11.30
 *     目录相关的操作
 *     1、建立目录(md)
 *     2、显示目录内容(dir)
 *     3、删除空目录(rd)
 *     4、搜索登记项功能，搜索条目
 */
public interface DirectoriesServer {
    File file = new File(XMLUtils.getFilePath("disk"));
    static final String NULLREGITEM = "$  "; // 空登记项名
    public static final int NOT_FILE = View.NOT_FILE; // 非文件
    public static final int MAX_REGITEM = 8; // 一个块最多的登记项
    /**
     * 建立目录
     * @param path 绝对路径 以/分割
     */
    public void md(String path) throws IOException;
    // 显示目录内容
    public DirectoriesView dir(String path) throws IOException;
    // 删除空目录
    public boolean rd(String path) throws IOException;
    // 读取一个块，转换成登记项数组
    public List<RegItem> readABlock(int blockNum);
    // 将长度为8的登记项写进文件里
    public void writeABlock(int blockNum,List<RegItem> dirRegItems) throws IOException;
    // 该目录是否有重名的项
    public boolean hasRepeaet(List<RegItem> regItems,String name);

    /**
     *
     * @param regItems
     * @param name 表示空登记项的名称 "$  "
     * @return
     */
    public boolean isempty(List<RegItem> regItems,String name);

    /**
     * 关键词搜索
     * @param index
     * @param blocknum 起始目录所在的盘块号
     * @return 匹配到的登记项数组
     */
    public List<SearchResult> serachRegItem(String index, int blocknum);
    public int getBlockNum(String path) throws IOException;
    public DirectoriesView getRootDir();
}
